home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / network / info-sys / www / tkhtml-2.3 / tkhtml-2 / tkHTML-2.3 / entities.tcl < prev    next >
Encoding:
Text File  |  1995-02-06  |  5.3 KB  |  171 lines

  1. ##################
  2. # Build entities
  3. # by Heiko Jacobs <jacobs@ipf.bau-verm.uni-karlsruhe.de>
  4.  
  5. global insertspec insertesc insertescape entlist esclist escesclist 
  6. global entities escapei nesc
  7. # Defaults for menus
  8. set insertspec 1
  9. set insertesc 1
  10.  
  11. set entlist ""
  12.  
  13. # all escape characters
  14. set esclist    [ list "\""     "'" "`" ]
  15. set nesc [ llength $esclist ]
  16. # what to do for doubled escape characters ( typing "" -> " )
  17. set escesclist [ list """ "'" "`" ]
  18.  
  19. for { set i 0 } { $i < $nesc } { incr i } {
  20.     set insertescape($i) 0
  21.     set escapei([lindex $esclist $i]) $i
  22. }
  23.  
  24. # store values from list (file???) to array
  25. proc defentities {name iso key ent esc1 esc2 text {spon 1} {eson 1} } {
  26. # name : any name you like ...
  27. # iso  : this character you want to get finally on screen
  28. # key  : its name in X11
  29. # ent  : its HTML-entity
  30. # esc1 : number of escape character
  31. # esc2 : the character typed after escape character
  32. # text : any text for menu 
  33. # spon : change typed special char to entity if on
  34. # eson : change escaped char to entity if on
  35.     global entities entlist
  36.     set entities($name,iso) $iso
  37.     set entities($name,key) $key
  38.     set entities($name,ent) $ent
  39.     set entities($name,esc1) $esc1
  40.     set entities($name,esc2) $esc2
  41.     set entities($name,text) $text
  42.     set entities($name,spon) $spon
  43.     set entities($name,eson) $eson
  44.     lappend entlist $name
  45. }
  46.  
  47. # all entities you want to use...
  48.  
  49. defentities "am" "&"    "Key-ampersand"   "&"    0 "&"  "Ampersand" 0 1
  50. defentities "gt" ">"    "Key-greater"     ">"     0 ">"  "greater"   0 1
  51. defentities "lt" "<"    "Key-less"        "<"     0 "<"  "less"      0 1
  52. defentities "qt" "\""   "Key-quotedbl"    """   0 "\"" "quote"     0 1
  53. defentities "ae" "\344" "Key-adiaeresis"  "ä"   0 "a"  "a-Umlaut"
  54. defentities "Ae" "\304" "Key-Adiaeresis"  "Ä"   0 "A"  "A-Umlaut"
  55. defentities "oe" "\366" "Key-odiaeresis"  "ö"   0 "o"  "o-Umlaut"
  56. defentities "Oe" "\326" "Key-Odiaeresis"  "Ö"   0 "O"  "O-Umlaut"
  57. defentities "ue" "\374" "Key-udiaeresis"  "ü"   0 "u"  "u-Umlaut"
  58. defentities "Ue" "\334" "Key-Udiaeresis"  "Ü"   0 "U"  "U-Umlaut"
  59. defentities "ss" "\337" "Key-ssharp"      "ß"  0 "s"  "scharfes s"
  60. defentities "ea" "\351" "Key-eacute"      "é" 1 "e"  "e-acute"
  61. defentities "aa" "\341" "Key-aacute"      "á" 1 "a"  "a-acute"
  62. defentities "eg" "\350" "Key-egrave"      "è" 2 "e"  "e-grave"
  63. defentities "ag" "\340" "Key-agrave"      "à" 2 "a"  "a-grave"
  64. defentities "ec" "\352" "Key-ecircumflex" "ê"  1 "x"  "e-circumflex"
  65.  
  66. # what to insert, if a special key is hit
  67. proc insertspecial {ch1 ch2} {
  68.     global insertspec insertescape nesc
  69. # checkbutton is on, insert its entity
  70.     if { $insertspec } then {
  71.         set insertfound 0
  72.         for { set i 0 } { $i < $nesc } { incr i } {
  73. # any escape character is hit before, don't insert entity, but original char
  74.             if { $insertescape($i) } then {
  75.                 .textframe.vp.text insert insert $ch2
  76.                 set insertescape($i) 0
  77.                 set insertfound 1
  78.             }
  79.         }
  80. # insert entity
  81.         if { $insertfound == 0 } then {
  82.             .textframe.vp.text insert insert $ch1
  83.         }
  84. # insert original iso character
  85.     } else {
  86.         .textframe.vp.text insert insert $ch2
  87.     }
  88. }
  89.  
  90. #####################
  91. # define bindings
  92.  
  93. proc MkEntities {} {
  94.     global entlist entities esclist escesclist nesc
  95.  
  96. # define bindings for iso chars etc. if there are any on your keyboard...
  97.     foreach ent $entlist {
  98.         if { $entities($ent,spon) } {
  99.             bind .textframe.vp.text <$entities($ent,key)> \
  100.     "insertspecial \"$entities($ent,ent)\" \"$entities($ent,iso)\""
  101.         }
  102.     }
  103.  
  104. # define bindings for escape characters
  105.     for { set i 0 } { $i < $nesc } { incr i } {
  106.         bind .textframe.vp.text "[lindex $esclist $i]" {
  107.             global insertesc insertescape nesc escapei
  108.             set k $escapei(%A)
  109.             if { $insertescape($k) } then {
  110.                 .textframe.vp.text insert insert \
  111.                     "[lindex $escesclist $k]"
  112.                 for { set j 0 } { $j < $nesc } { incr j } {
  113.                     set insertescape($j) 0
  114.                 }
  115.             } else {
  116.                 for { set j 0 } { $j < $nesc } { incr j } {
  117.                     set insertescape($j) 0
  118.                 }
  119.                 if { $insertesc } then {
  120.                     set insertescape($k) 1
  121.                 } else {
  122.                     .textframe.vp.text insert insert "%A"
  123.                 }
  124.             }
  125.         }
  126.     }
  127. # redefine ALL other characters to check if they are preceeded 
  128. # by a escape character
  129.     bind .textframe.vp.text <Any-KeyPress> {
  130.         global insertescape nesc esclist
  131.         if { "%A" != "" } then {
  132.             set insertfound 0
  133.             for { set i 0 } { $i < $nesc } { incr i } {
  134.                 # this escape character is typed before
  135.                 if { $insertescape($i) && !$insertfound } then {
  136.                     foreach ent $entlist {
  137.                        # right esc char and right entity?
  138.                        if { $entities($ent,esc1) == $i && \
  139.                           $entities($ent,eson) && \
  140.                           "%A" == $entities($ent,esc2) } {
  141.                         %W insert insert \
  142.                            "$entities($ent,ent)"
  143.                         set insertfound 1
  144.                        }
  145.                     }
  146.                     # no legal combination, blank ->
  147.                     # escape character itself...
  148.                     if { !$insertfound && "%A" == " " } {
  149.                         %W insert insert \
  150.                             "[lindex $esclist $i]"
  151.                         set insertfound 1
  152.                     } elseif { !$insertfound } {
  153.                     # any other non-legal combination ->
  154.                     # insert esc char and next char...
  155.                         %W insert insert \
  156.                             "[lindex $esclist $i]%A"
  157.                         set insertfound 1
  158.                     }
  159.                     set insertescape($i) 0
  160.                 }
  161.             }
  162.             # there is no escape char, insert it...
  163.             if { $insertfound == 0 } then {
  164.                 %W insert insert %A
  165.             }
  166.             %W yview -pickplace insert
  167.         }
  168.     }
  169. }
  170.  
  171.